iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
佛心分享-IT 人自學之術

自學swift語法系列 第 26

Day26-Struct 的建立和用法 & private 存取限制

  • 分享至 

  • xImage
  •  

Struct

  • 一種 Value Type 的資料類型。
  • Struct 有靜態空間和實例空間。
  • 在這些空間裡平常一樣建立變數(屬性)和 function(方法),但它們需透過對應的空間存取。
  • 主要用來包裝資料和整理 code。
  • 可以 conforms to Protocol。

建立 Struct

  • 透過關鍵字 struct 宣告。
  • 慣用大駝峰命名。
  • 在後方大括號內的區域定義。

設定屬性

  • 在類型內建立的變數是實例的屬性只能透過實例存取。
  • 在實例被建立前並不真的存在,所以不需要先賦值。
  • 用 let 的話建立後就不能更改。

設定方法

  • 在類型內建立的 function 是實例的方法,只能透過實例存取。
  • 可以直接存取實例的屬性。
  • 如果要從方法修改屬性,需要標記方法是「mutating」。

設定靜態屬性&方法

  • 在方法和屬性前面加上 static 就變成靜態的。
  • 靜態不需要實例,它屬於類型本身,也就是程式一啟動就存在了。
  • 可以直接存取自己的靜態屬性。

類型裡的 Self & self

  • self 表示自己,通常會省略。
  • Self 表示自己的類型。

預設啟動方式

  • Struct 會自動根據預設的資料建立啟動方式,用屬性名稱作為引數名稱。
  • 可以省略已經有預設值的屬性。

自訂啟動方式

  • 可以透過 init 自己定義啟動方式,寫法和 function 一樣。
  • 必須是 init 的 block 之中賦值給所有沒有預設值,不是 Optional 的屬性。
  • init 是 mutating 的。
  • 自己定義 init 後不會保留自動產生的。

私有屬性

  • 在屬性前加上 private,這個屬性就不能從外部存取。
  • private 屬性無法產生預設啟動,需要自己寫 init,或是用 let 設定固定的預設值。
  • 屬性可以被 get(讀取)和 set(寫入)。
  • 設定寫入的部分私有,讓外部依然能存取,但不能修改。

conforms to Protocol

  • 在定義類型名稱的後面加上冒號和想加入的 Protocol。
  • 用逗點區分多個 Protocol。
  • 需要在 struct 的定義中加入規範的屬性或方法。
  1. Struct 是 Value Type 還是 Reference Type?
    => Value Type
  2. 什麼時候需要在方法前加上 mutating?
    => 需要在實例內部修改屬性的時候。
  3. Self 和 self 分別代表什麼?
    => Self 表示目前操作對象的「類型」,self 表示目前操作對象「本身」。
  4. 一個類型的靜態屬性可以在哪些地方存取?
    => 可以在任何地方透過類型名稱存取。

實作部分:https://ithelp.ithome.com.tw/upload/images/20241010/20169272W4CAji2q1H.pnghttps://ithelp.ithome.com.tw/upload/images/20241010/20169272UWrS5vu2JL.pnghttps://ithelp.ithome.com.tw/upload/images/20241010/20169272mvE2qU8AhU.png

影片連結:https://youtu.be/UbL6caIdIcA?si=op97J9XEFufPEoAr


上一篇
Day25-map、reduce、filter 高階函氏用法
下一篇
Day27-計算屬性 & 屬性觀察 & lazy 屬性
系列文
自學swift語法30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言